/*
 * @Author: StarAire 1573905390@qq.com
 * @Date: 2023-08-18 15:14:10
 * @LastEditors: StarAire 1573905390@qq.com
 * @LastEditTime: 2023-08-28 06:37:10
 * @FilePath: /snake/include/snake/global.h
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#ifndef GLOBAL_H
#define GLOBAL_H

// 游戏参数
// 行和列的像素单位转换
#define PIX_ROW 1 // 行像素
#define PIX_COL 2 // 列像素
#define COOR_TRANS_ROW(r) (r)*(PIX_ROW)
#define COOR_TRANS_COL(c) (c)*(PIX_COL)
#define CTR COOR_TRANS_ROW
#define CTC COOR_TRANS_COL


// 起始偏移点
#define MAP_OFFSET_ROW 2 // 行偏移点
#define MAP_OFFSET_COL 2 // 列偏移点
#define GAME_TO_REAL_ROW(r) CTR(MAP_OFFSET_ROW + (r))
#define GAME_TO_REAL_COL(c) CTC(MAP_OFFSET_COL + (c))
#define GTRR GAME_TO_REAL_ROW
#define GTRC GAME_TO_REAL_COL

// 游戏地图大小
#define MAP_HEIGHT 20   // 游戏地图高度
#define MAP_WIDTH 20    // 游戏地图宽度 

#define SqList
// #define LinkList

// 游戏成员数据结构

#ifdef SqList
// 线性表实现
// 蛇节点坐标
typedef struct SnakeBodyNodeCoord{
    unsigned int r; // 行
    unsigned int c; // 列
}SnakeBNCoord; 

// 蛇 数组实现
typedef struct{
    SnakeBNCoord body_node[MAP_HEIGHT*MAP_WIDTH]; //0位是蛇头；最多占满整个地图
    unsigned int body_length; // 蛇长度
    unsigned int motion_dir;  // 移动方向 上0 下1 左2 右3
}SnakeInfo; // 蛇信息结构体


// 食物
typedef struct{
    unsigned int r; // 行
    unsigned int c; // 列
    unsigned char is_draw; // 是否绘制
}FoodInfo;

extern SnakeInfo mysnake;
extern FoodInfo food;


#endif


#ifdef LinkList

// 链表实现

#endif




void GlobalInit(void); // 全局初始化
void GlobalEnd(void); // 全局结束



#endif
